<?php
// +----------------------------------------------------------------------
// | RXThinkCMF_TP5.1混编版框架 [ RXThinkCMF ]
// +----------------------------------------------------------------------
// | 版权所有 2022 南京RXThinkCMF研发中心
// +----------------------------------------------------------------------
// | 官方网站: http://www.rxthink.cn
// +----------------------------------------------------------------------
// | 作者: 牧羊人 <rxthinkcmf@163.com>
// +----------------------------------------------------------------------
// | 免责声明:
// | 本软件框架禁止任何单位和个人用于任何违法、侵害他人合法利益等恶意的行为，禁止用于任何违
// | 反我国法律法规的一切平台研发，任何单位和个人使用本软件框架用于产品研发而产生的任何意外
// | 、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (包括但不限于直接、间接、附带
// | 或衍生的损失等)，本团队不承担任何法律责任。本软件框架只能用于公司和个人内部的法律所允
// | 许的合法合规的软件产品研发，详细声明内容请阅读《框架免责声明》附件；
// +----------------------------------------------------------------------

namespace app\api\service;


use app\api\model\User;
use util\Jwt;

/**
 * 用户模型-服务类
 * Class UserService
 * @package app\api\service
 */
class UserService extends BaseService
{
    /**
     * 初始化方法
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
        $this->model = new User();
    }

    /**
     * 用户登录获取Token令牌
     * @param $param
     * @author 牧羊人
     * @date 2019/8/29
     */
    public function login($param)
    {
        // 参数接收
        $username = getter($param, 'username', '');
        if (!$username) {
            return message(MESSAGE_PARAMETER_MISSING);
        }
        $password = getter($param, 'password', '');
        if (!$password) {
            return message(MESSAGE_PARAMETER_MISSING);
        }

        // 获取用户信息
        $info = $this->model->getOne([
            ['username', '=', $username],
        ]);
        if (!$info) {
            return message("您的账号不存在");
        }

//        // 密码校验
//        if (get_password($password) != $info['password']) {
//            return message("密码不正确");
//        }

        // 人员状态验证
        if ($info['status'] != 1) {
            return message("您的账号已被禁用,请联系管理员");
        }

        // JWT生成token
        $jwt = new Jwt();
        $token = $jwt->getToken($info['id']);

        // 结果返回
        $result = [
            'token' => $token,
        ];
        return message(MESSAGE_OK, true, $result);
    }

    /**
     * 获取用户主要信息【演示按钮】
     * @param $param
     * @return array
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getMyInfo($param)
    {
        // 工号参数
        $num = getter($param, 'num', '');
        if (!$num) {
            return message(MESSAGE_PARAMETER_MISSING);
        }

        // 获取用户信息
        $info = $this->model->getInfoByAttr([
            ['num', '=', $num],
        ]);
        if (!$info) {
            return message(MESSAGE_USER_NO_INFO);
        }

        // 返回结果
        $result = [
            'user_id' => $info['id'],
            'realname' => $info['realname'],
        ];
        // 返回一个用户对象
        return message(MESSAGE_OK, true, $result);
    }

    /**
     * 获取所有用户列表【演示按钮】
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getAllUser()
    {
        $result = $this->model->getDataList([], function ($info) {
            return [
                'user_id' => $info['id'],
                'realname' => $info['realname'],
                'num' => $info['num'],
                'status' => $info['status'],
            ];
        });
        return $result;
    }

    /**
     * 获取多行数据列表【演示按钮】
     * @param $param
     * @param $userId
     * @return array
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getDataList($param, $userId)
    {
        // 用户名(演示事例：接口参数，判断是否为空，如果是必填且为空直接返回参数丢失)
        $realname = getter($param, 'realname', '');
        if (!$realname) {
            return message(MESSAGE_PARAMETER_MISSING);
        }

        $map = [
            'query' => [
                ['realname', 'like', $realname],
            ],
            'sort' => [
                ['id desc'],
            ],
            'limit' => "0,1",
        ];
        $result = $this->model->getDataList($map, function ($info) {
            return [
                'user_id' => $info['id'],
                'realname' => $info['realname'],
                'num' => $info['num'],
                'status' => $info['status'],
            ];
        });
        // 返回成功事例
        return message(MESSAGE_OK, true, $result);
//        // 返回失败事例
//        return message(MESSAGE_FAILED);
    }

    /**
     * 获取分页数据列表【演示按钮】
     * @param $param
     * @param $userId
     * @return array
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getPageList($param, $userId)
    {
        $map = [
            'query' => [
                ['status', '=', 1],
            ],
            'sort' => [
                ['id desc'],
                ['num desc'],
            ],
            'page' => 1,
            'perpage' => 1,
        ];
        $result = $this->model->pageData($map, function ($info) {
            return [
                'user_id' => $info['id'],
                'realname' => $info['realname'],
                'num' => $info['num'],
                'status' => $info['status'],
            ];
        });
        // 返回成功事例
        return message(MESSAGE_OK, true, $result);
//        // 返回失败事例
//        return message(MESSAGE_FAILED);
    }
}
